package com.bytezreo.interfacetest;

/**
 * 
 * @Description   interface 接口的使用   implements 实现----  
 * @author Bytezero·zhenglei!        Email:420498246@qq.com
 * @version
 * @date 下午4:14:17
 * @  1.接口的使用interface来定义
 *    2.在Java 中，接口和类时并列的两个结构
 *    3.如何定义接口：定义接口中的成员
 *      
 *       3.1 JDK7以及以前：只能定义全局常量和抽象方法
 *       	 >全局常量：public  static final的,但是书写时，可以省略
 *           >抽象方法：public  abstract
 *       
 *       3.2 JDK8：除了定义全局常量和抽象方法之外，还可以定义静态方法和默认方法
 *       
 *    4.接口中不能定义构造器！  意味着 接口不可以实例化
 *    
 *    5.java 开发中，接口通过让类去实现（implements）的方式来使用  
 *      如果实现类 覆盖了接口中的所有抽象方法，则此实现类就可以实例化
 *      如果实现类 没有覆盖接口中所有的抽象方法，则此实现类仍为抽像类
 *      
 *      
 *    6.Java 类可以实现多个接口 ---->弥补了 Java 单继承性的局限性
 *      格式： class AA extends BB implements CC,DD,EE
 *      
 *    7.接口与接口之间可以继承， 可以多继承  
 *    
 *    ********************************************
 *    
 *    8.接口的具体使用，体现多态性
 *    
 *    9.接口，实际上可以看做时一种规范
 *    
 *    抽象类与接口有哪些异同？
 *        
 *    
 */
public class InterfaceTest {
	public static void main(String[] args) {

		System.out.println(Flyable.MAX_SPEED);
		System.out.println(Flyable.MIN_SPEED);
		
		//Flyable.MIN_SPEED = 2;  //不能赋值
		
		Plane plane = new Plane();
		plane.fly();
	}
}

//接口
interface Flyable{
	
	//全局常量
	public static final int MAX_SPEED = 7900; //第一宇宙速度
//	public static final int MIN_SPEED = 1;
	
	int MIN_SPEED = 1;  //省略了 public static final
	
	//抽象方法
	public abstract void fly();
	
//	public abstract  void stop();
	
	//省略了 public abstract
	void stop();
	
	
	
}

//接口
interface Attackable{
	
	void attack();
}


//实现类
 class Plane implements Flyable{

	@Override
	public void fly() {
		System.out.println("飞机通过引擎飞");
		
	}

	@Override
	public void stop() {
		System.out.println("驾驶员减速停止");
		
	}

}

 abstract class Kite implements Flyable{
	 
	 //kite 不能实例化了
	@Override
	public void fly() {
		
		
	}


	 
 }

 
 class Bullet extends Object implements Flyable,Attackable,CC{

	@Override
	public void attack() {
	
		
	}

	@Override
	public void fly() {
		
		
	}

	@Override
	public void stop() {
		
		
	}

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method2() {
		// TODO Auto-generated method stub
		
	}
	 
	 
 }

 //*************************************************
 
 interface AA{
	 
	 void method1();
 }

 interface BB{
	 void method2();
 }
 
 
 interface CC extends AA,BB{
	 
 }
